package cn.quevo.ucenter.core.token;

import java.util.Set;

public interface AuthorizationToken {

    /**
     * 获取访问Token
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:17:21
     * @return
     */
    String getAccessToken();

    /**
     * 获取客户端ID
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:17:44
     * @return
     */
    String getClientId();

    /**
     * 获取主体ID
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:18:01
     * @return
     */
    Long getSubjectId();

    /**
     * 获取用户姓名
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:18:19
     * @return
     */
    String getUserName();
    
    /**
     * 获取记录拥有者
     * 
     * @author July july_sky@foxmail.com
     * @date 2018年1月2日 下午12:22:01
     * @return
     */
    Long getRecordOwnerId();

    /**
     * 呼气过期时间
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:18:36
     * @return
     */
    Long getExpiredIn();

    /**
     * 是否已过期
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:18:55
     * @return
     */
    boolean isExpired();

    /**
     * 是否超级管理管理
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:20:25
     * @return
     */
    boolean isSuperAdmin();

    /**
     * 获取角色集合
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:19:37
     * @return
     */
    Set<String> getRoles();

    /**
     * 获取权限集合
     * 
     * @author July july_sky@foxmail.com
     * @date 2017年12月29日 下午10:20:00
     * @return
     */
    Set<String> getPermissions();
    
    /**
     * 记录拥有者名称
     * 
     * @author July july_sky@foxmail.com
     * @date 2018年2月3日 下午11:28:17
     * @return
     */
    String getRecordOwnerName();
    
    /**
     * 昵称
     * 
     * @author July july_sky@foxmail.com
     * @date 2018年2月3日 下午11:33:54
     * @return
     */
    String getNickName();
}
